package com.example;

import jakarta.servlet.http.HttpServletRequest;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.Arrays;
import java.util.Date;
import java.util.List;


@RequestMapping("/request")
@RestController //标识当前类是一个请求处理类
public class RequestController {
   /* @RequestMapping("/hello")//标识请求路径
    public String say(){
        return "hello,Spring mvc";
    }*/


    @RequestMapping("/m1")
    //接收参数，需要定义一个方法
    public String method1(Integer name){
        return "接收的name参数："+name;
    }

    @RequestMapping("/m2")
    //接收多个参数
    public String method2(String name,int age){
        return "name:" + name + " age:" + age;
    }

    @RequestMapping("/m3")
    //传递对象
    public String method3(Student student){
        return "接收对象参数："+ student;
    }

    @RequestMapping("/m4")
    //参数重命名,required = false表示参数不是必须的
    public String method4(@RequestParam(value = "name",required = false) String userName){
        return "接收的userName参数："+userName;
    }

    //接收数组参数
    @RequestMapping("/m5")
    public String method6(String[] array){
        return "接收到的数组参数："+ Arrays.toString(array);
    }
    /**
     * 接收集合参数
     * 需要加入注解@RequestParam，此时默认是必传参数，要修改
     * 成非必传参数，需要加入required=false
     * @param list
     * @return
     */
    @RequestMapping("/m6")
    public String method6(@RequestParam(required = false) List<String> list){
        return "接收到的集合参数："+list;
    }
    /**
     * 传递JSON对象数据，需要添加注解@RequestBody
     * @param student
     * @return
     */
    @RequestMapping("/m7")
    public String method7(@RequestBody Student student){
        return student.toString();
    }
    /**
     * 传递JSON对象数组
     * @param list
     * @return
     */
    @RequestMapping("/m8")
    public String method8(@RequestBody List<Student> list){
        return list.toString();
    }
    /**
     * 从URL中获得参数
     * 如果URL中的参数名和方法的形参名一样，则注解不用添加属性,不一样，则加入的事URL中的参数名
     * @param userId
     * @param name
     * @return
     */
    @RequestMapping("/m9/{id}/{name}")
    public String method9(@PathVariable("id") Integer userId, @PathVariable String name){
        return "接收到的路径参数id name分别为"+userId+","+name;
    }

    /**
     * 上传文件
     * 需要使用注解，属性是file
     * @return
     */
    @RequestMapping("/m10")
    public String method10(@RequestPart("file") MultipartFile imgFile){
        String originalFilename = imgFile.getOriginalFilename();//返回文件的原始名，也就是在上传机器的名字
        return "接到到文件, 文件名称:"+originalFilename;
    }

    /**
     *
     * 使用@DateTimeFormat注解设置日期类型数据格式，默认格式yyyy/MM/dd
     * @param date
     * @return
     */
    @RequestMapping("/m11")
    public String method11(@DateTimeFormat(pattern="yyyy-MM-dd") Date date){
        return "传递的日期是"+date;
    }

    /**
     * 获取header
     * @param request
     * @return
     */
    @RequestMapping("/m17")
    public String method17(HttpServletRequest request){
        //参数中写header的key
        String header = request.getHeader("User-Agent");
        return "从header中获取信息："+header;
    }

}
